• 検索結果がありません。

ELS1397 Q1500 10 1 Nios® II はじめてガイド GNU コンパイラと Nios® II Software Build Tool | マクニカオンラインサービス ELS1397 Q1500 10 1

N/A
N/A
Protected

Academic year: 2018

シェア "ELS1397 Q1500 10 1 Nios® II はじめてガイド GNU コンパイラと Nios® II Software Build Tool | マクニカオンラインサービス ELS1397 Q1500 10 1"

Copied!
20
0
0

読み込み中.... (全文を見る)

全文

(1)

ALTIMA Corp.

2015年7 Rev.1

GNU

Nios II Software Build Tool

(2)

GNU

Nios II Software Build Tool

目次

1. ... 3

2. 組込 開発 ... 4

3. GNU MAKE ... 5

3-1. GNU GCC ... 5

3-2. make ... 6

3-3. GCC 最適化 ... 8

3-4. ... 8

4. ン 役割 ン ... 11

4-1. 構造 ン ... 11

4-1-1. 構造 ン ...11

4-1-2. 自動生成 ン linker.x ... 14

4-2. ... 17

5. BSP (BOARD SUPPORT PACKAGE) ... 18

6. ... 19

7. 参考文献 ... 19

(3)

GNU ン Nios II Software Build Tool

1.

資料 Nios ®

II Software Build Tool 降 Nios II SBT 使用 際 GNU

ン や ン 初歩的 概念 体系的 明 資料 Nios II 外 CPU

GNU ン 経験 設計者や 使用 組込 開発

設計者 Quartus

®

II 開発 用 内容 4章 降 設計者

見 高 内容 含 い 参考 留 い

対象 ン: Quartus II v15.0

Nios II SBT v15.0

(4)

2.

組込

開発

最初 組込 開発 概略 紹

作成

開発環境や 使用 ン 言語 C/C++ 記述

C/C++ ン

C/C++ ン ン 言語 ン 言語 変換 Nios II SBT GNU

C/C++ ン GCC 使用

ン ン 言語 変換

※ FPGA 開発 Quartus II ン ン 異 FPGA/CPLD 書

込 .sof / .pof 生成 行い

ン や 情報 集約 結合 最終的 実行 ELF

生成 Nios II SBT ELF 拡張子 .elf 表記

ン ROM化 生成

GNU ELF S 変換

Nios II SBT S 拡張子 .flash 表記

ン 実機動作

Nios II SBT JTAG JTAG_UART 経由 S RAM

格納 実行 FPGA開発 SOF 書込 相当

ROM 化 書込

Nios II SBT Flash Programmer JTAG 経由 S ROM 書込

(5)

GNU ン Nios II Software Build Tool

3.

GNU

make

3-1.GNU GCC

GCC GNU Compiler Collection 先頭 3文 GNU C ン 意味 略語

組込 用途 ン 様々 ン 在 昨 最 普及 い

GCC 図3-1 前章 ン GNU 少 踏 込 内容

図3-1. GCC ン ROM 化

GNU ン Quartus II 様 ン cpp0 → ン

cc1 → ン as → ン ld 実行 GCC ン ン gcc ン

指定 ば ン 実施 実行 生成 Nios II SBT

図3-2 う nios2-elf-gcc ン 提供 引数

foo.c –v ン 付加 い –v ン ン 処理 各段階 い 実行

ン 表示 ン

ROM化

ROM化 (S , Hex)

実行 ELF

(objcopy)

foo.flash, foo.hex main.c

GCC ン

sub_1.c sub_2.c

main.i sub_1.i sub_2.i

main.s sub_1.s sub_2.s

main.o sub_1.o sub_2.o 必要

foo.elf

ン (cc1)

ン (as)

(cpp0)

ン (ld)

(6)

図3-2. gcc ン 例

gcc ン ン 行う cc1 や as 背後 実行 い 確認

図3-3 う ン 指定 ば 段階 踏 ン 可能

図3-3. gcc ン 例

う gcc ン ン 指 あ GCC C ン cc1 区

別 ン ば あ 実際 図3-3 う 単純 様々

ンや関連 設定 目 追加 例: -g ン -I ン

3-2.make

gcc 対 複雑 設定 目 毎 設定 用意 所定 記

録 変更 う 組 利用 ば便利 GNU GNU make (gmake) いう

用意 ン ン PATH 様々 設定 毎 管理

毎 設定 いう意味 Quartus II QSF Quartus II 設定 部

分的 似 い

Nios II SBT make

Nios II SBT 毎 make 自動生成 図3-4 make 一部

抜粋 make 作 現実的 あ 精通 方 除

際 自動生成 推奨

[NiosII EDS]$ nios2-elf-gcc foo.c -v

[NiosII EDS]$ nios2-elf-gcc foo.c -v -S [NiosII EDS]$ nios2-elf-gcc foo.c -v -o foo.o

-S ン:

cc1 実施

ン 生成

-o ン:

as 実施

(7)

GNU ン Nios II Software Build Tool

図3-4. Nios II SBT 自動生成 make 一部抜粋

Nios II SBT 作成 make 自動生成 ン ン ン

make あ 移動 図3-5 う make make all

GNU make gcc ン 実行 ELF 生成

ン ン 処理 過程 表示 追う 確認

図3-5. make 例

make 図3-6 う 後 make clean 状態

前 状態 戻 消え

図3-6. make 例

make 複数 ン う 開発 場合 修

ン 見 修 再 ン 既 ン

行い 整合 保 役割 持 い 意味

Quartus II Smart Compilationや ン ン ン 似 い 知

.PHONY : all

all:

@$(ECHO) [$(APP_NAME) build complete]

all : build_pre_process libs app build_post_process

$(OBJ_ROOT_DIR)/%.o: %.c

@$(ECHO) Info: Compiling $< to $@

@$(MKDIR) $(@D)

$(CC) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CFLAGS) -o $@ $<

$(CC_POST_PROCESS)

$(OBJ_ROOT_DIR)/%.o: %.cpp @$(ECHO) Info: Compiling $< to $@

@$(MKDIR) $(@D)

$(CXX) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<

$(CXX_POST_PROCESS)

$(OBJ_ROOT_DIR)/%.o: %.cc

@$(ECHO) Info: Compiling $< to $@

@$(MKDIR) $(@D)

$(CXX) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<

$(CXX_POST_PROCESS)

CROSS_COMPILE := nios2-elf- CC := $(CROSS_COMPILE)gcc -xc CXX := $(CROSS_COMPILE)gcc -xc++ AS := $(CROSS_COMPILE)gcc AR := $(CROSS_COMPILE)ar LD := $(CROSS_COMPILE)g++ NM := $(CROSS_COMPILE)nm RM := rm -f

OBJDUMP := $(CROSS_COMPILE)objdump OBJCOPY := $(CROSS_COMPILE)objcopy STACKREPORT := nios2-stackreport DOWNLOAD := nios2-download FLASHPROG := nios2-flash-programmer ELFPATCH := nios2-elf-insert

MKDIR := mkdir -p

[NiosII EDS]$ make all

(8)

3-3.GCC 最適化

GCC ン ン 中 最適化 ン 紹 Quartus II 様 GCC

ン 考慮 複数 最適化 用意 い

◇ -O :-O1

◇ –O0 :最適化 0

最適化 行い GCC や い 生成

◇ -O1 :最適化 1

ン 実行 間 両方 削減 ン 間

-O0 場合 減 CPU内蔵 汎用 値

保 う 最適化 行わ

◇ -O2 :最適化 2

-O1 最適化 行い ほ 全 最適化 行い ン 間

長 生成 概 高速化

◇ -O3 :最適化 3

-O2 指定 全 最適化 行い 展開や ン ン展開 実施

◇ -Os :最適化 s

-O2 指定 最適化 中 実行 間 削減 優先 最適化

行わ

3-4.

実行 操作 あ Binutils (GNU Binary Utilities)

ば い 表的 紹

◇ objcopy : 表的 使用用途 ROM 化 際 変換 あ

Nios II SBT 図3-7 う nios2-elf-objcopy ン 提供 -I

(9)

GNU ン Nios II Software Build Tool

図3-7. objcopy 例

◇ nm : ン 表示 Nios II SBT 図 3-8 う

nios2-elf-nm ン 提供 nios2-elf-nm ン 出力

ン機能 使用 foo.nm いう 出力 い

図3-8. nm 例

※ ン :

C 言語 変数や関数 定義 実体 利用可能 空間

領域 確保 意味 変数 や関数 確保 領

域 あ 言え 関数や変数 単 前 扱わ

前 ン

※ ン :

ン 管理 ン 情報 ン ン ン

実体 配置位置 情報 関数や変数 在

ン 情報 管理 ン 配列 持 い

[NiosII EDS]$ nios2-elf-objcopy -I srec -O ihex foo.flash foo.hex [NiosII EDS]$ nios2-elf-objcopy -O srec foo.elf foo.flash

[NiosII EDS]$ nios2-elf-objcopy -I srec -O binary foo.flash foo.bin

ELF S 変換

S HEX 変換

S 変換

(10)

◇ objdump : 情報 表示 表的 ン 紹

■ --disassemble: 逆 ン 行い

■ --syms: ン 情報 表示

■ --all-header: ELF 情報 表示

■ --source: 逆 ン 元 対比 表示

Nios II SBT 図3-9 う nios2-elf- objdump ン 提供

図3-9. objdump 例

◇ size : 表 示 ン 表 示 Nios II SBT 図 3-10 う

nios2-elf-size ン 提供

図3-10. size 例

◇ readelf : ELF 情報 情報や ン 情報 表示 Nios II SBT 図3-11

う nios2-elf- readelf ン 提供 出力

図3-11. readelf 例

[NiosII EDS]$ nios2-elf-objdump --disassemble --syms --all-header --source foo.elf > foo.objdump

[NiosII EDS]$ nios2-elf-size foo.elf

text data bss dec hex filename 67200 7612 532 75344 12650 foo.elf

(11)

GNU ン Nios II Software Build Tool

4.

役割

ン や ン 複数 や 元々 用意 い

複数 ン 結合 ン へ 指示書 従 や

空間 配置 ン へ 指示書 ン いい 図3-1 GCC ン

示 い ン ン 込 ン 作業 行い 最終的

結合 解決 情報 解決 実行 生成 解決 い

資料 割愛

4-1. 構造 ン

C 言語 設計者 作成 作成中

場所 配置 い 問題 厳密 考え い 最後

あ 配置 ば

C 言語 構造 + 構成 い 構造 個々

異 性質 持 い 配置場所 別々 考え

4-1-1. 構造 ン

図4-1 性質 異 構造 具体例 簡易的 明 い 記述

変数や関数 ン 段階 う 構造 分類 い 最終的

う 配置 い 図示 い

用途 応 性質 異 領域 分割 い 個々 領域

ン いい ン .bss や .text いう う ン 先頭 .

付 表現

図4-1 初期値 指定 変数や配列 .rwdata ン 分類

変数 定数 初期値 指定 専用 .rodata 分類

初期値 持 い配列 .bss ン 分類 main 関

数 .text ン 分類 .text ン ROM

う 不揮発性 常駐 .rodata ン 専用 不揮発性 配置

.rwdata ン .bss ン RAM う 書 換え可能 揮発性 内 配置

一般的 初期値 無 実 無 着目 .rwdata ン .bss ン

別々 性質 持 見 両者 RAM 別々 領域 配置 必要 あ

(12)

図4-1. ン 配置 い 様子

基 領域

C 言語 領域 確保 要 大雑把 3

領域 分類

◇ 領域 : 変数 auto 変数 関数 引数 確保

◇静的記憶領域 : 変数 static 変数 確保

◇動的記憶領域 : 動的 確保 領域 領域 確保

#include <stdio.h>

#include “system.h”

#define BUFF_SIZE 5

int buff_1[BUFF_SIZE]; ←

int buff_2[BUFF_SIZE]; ←

int buff_3[BUFF_SIZE] = {0, 1, 2, 3, 4 }; ←

const int coeff_1[BUFF_SIZE] = {5,6,7,8,9};←

int main(void) {

int i;

static int a_val; ← static int b_val = 1; ←

for(i=0; i< BUFF_SIZE; i++) {

a_val = i+1; b_val = i+2;

buff_1[i] = 2*a_val; buff_2[i] = 3*b_val;

buff_3[i]= buff_1[i] + (coeff_1[i])*(buff_2[i]); }

return (0); }

変数

.bss ン

→ 配列変数buff_1

→ 配列変数buff_2

→ 変数a_val

.rwdata ン

→ 配列変数buff_3

→ 変数b_val

.rodata ン

→ 配列定数 coeff_1

変数

見 構造 ン 見 構造

見 構造

.bss ン

.rwdata ン

.text ン

ROM RAM

CPU

.text ン

→ main関数

(13)

GNU ン Nios II Software Build Tool

実行 ELF 外 様々 形式 a.out あ 共通 3

構造 紹

◇ 領域: 配置 専用 禁

◇ 領域: 初期値 持 変数 体 配置 可能 変数

や static 変数 配置対象 auto 変数 対象外

◇BSS領域: BSS Block Started by Symbol 略語 あ 初期値 持 い変数 配置

auto 変数 配置 対象外

ELF 出力 GNU ン ン

ELF 出力 GNU 定義 表的 ン 紹

◇ .text ン: 領域 通常 ROM 配置 ン ン 外部

RAM 指定 場合 ROM 化 際 Nios II Flash Programmer

ALTERA 提供 専用 付加 自動的 行い 後

起動 RAM .text ン

◇ .data ン: 領域 初期値 持 変数 RAM 配置 初期値 持 い

変数 .data ン .common ン 配置

ン 依

◇ .bss ン: BSS 領域 初期値 持 い変数 RAM 配置 関数内 構造体 動

的記憶領域 配置 領域や malloc() 等 配置

注: malloc() 引数 指定 数 領域 動的 確保

領域 領域内 割 当 ン 依

free() 領域 開放 い 空 容 食い潰

い 注意 必要

◇ .rodata ン: 専用 配置 const 言 文 列

主 配置

◇ .common ン: 初期値 持 い 変数 RAM 配置

◇ .stub ン .stubstr ン: GDB 情報 配置

情報や行番号 い 情報 集約 い GDB

GNU 指

◇ .comment ン: や 刻情報 配置

◇ .rwdata ン: 可能 RAM 配置 Nios II SBT 値0 初

期値 見

◇ .entry ン: Nios II SBT ン 自動的 配置

(14)

◇ . ( ) ン: Nios II SBT system.h 定義

Qsys ン ネン 関連

ン 自動的 定義

例: .ext_flash, .ext_ssram, .ddr_sdram_0

◇ 定義 ン: Nios II SBT BSP Editor 使用 GUI

任意 定義

4-1-2. 自動生成 ン linker.x

Nios II SBT linker.x いう ン 生成 後述 bsp

内 生成 linker.x 概 次 う 記述 構成 い

MEMORY ン

位置 大 定義 ン 領域 使 良い 領域

使 い い 記述 必要 数 定義 様 設定 Nios II

SBT BSP Editor GUI 行う

図4-2. MEMORY ン

OUTPUT_FORMAT ン

出力 や ン ン 指定

図4-3. OUTPUT_FORMAT ン

MEMORY {

reset : ORIGIN = 0x0, LENGTH = 32

ext_flash : ORIGIN = 0x20, LENGTH = 16777184 ext_ssram : ORIGIN = 0x1000000, LENGTH = 2097152

onchip_ram_BEFORE_EXCEPTION : ORIGIN = 0x2100000, LENGTH = 32 onchip_ram : ORIGIN = 0x2100020, LENGTH = 65504

epcs_controller : ORIGIN = 0x3200000, LENGTH = 2048 ddr_sdram_0 : ORIGIN = 0x4000000, LENGTH = 33554432 }

0x2100020 番 地 基 65504

バイ 分の 領域を確保

(15)

GNU ン Nios II Software Build Tool

OUTPUT_ARCH ン

指定

図4-4. OUTPUT_ARCH ン

ENTRY ン

ン ン 設定 ン ン 最初 実行 へ ン

開始

図4-5. ENTRY ン

OUTPUT_ARCH( nios2 )

(16)

SECTIONS ン

ン ンや ン 空間 配置

SECTIONS {

.entry : {

KEEP (*(.entry)) } > reset

.exceptions : {

<< 途中省略 >> } > onchip_ram

.text : {

<< 途中省略 >>

} > ddr_sdram_0 = 0x3a880100

.rodata : {

PROVIDE (__ram_rodata_start = ABSOLUTE(.)); . = ALIGN(4);

*(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata1)

. = ALIGN(4);

PROVIDE (__ram_rodata_end = ABSOLUTE(.)); } > ddr_sdram_0

<< 途中省略 >>

.rwdata : {

<< 途中省略 >> } > ddr_sdram_0 .bss :

{

<< 途中省略 >> } > ddr_sdram_0 .ext_flash : {

<< 途中省略 >> } > ext_flash .ext_ssram : {

<< 途中省略 >> } > ext_ssram

<< 途中省略 >>

.stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) }

<< 途中省略 >> }

ン 対象 全

.entry ン

集 約 結 合 最

終的 MEMORY

ン 定義

reset領域 .entry

ン 配置

.entry ン 続

い .exceptions ン → .text

ン 所 定

領 域

配置

.rodata ン 開始 __ram_rodata_start

ン ボ 設 定 (開 始 現 行 位 置 ン

値 位置 ンタを4ワ 境界 るよう 調整後

ンク対象の全て ク イ の以下のセク

ョンを集約 結合

.rodata .rodata.* .gnu.linkonce.r.* .rodata1

位置 ンタを4ワ イン後 終了

__ram_rodata_end ンボ 設定(終了 現行

位置 ン 値 結合 4ワ イン

調整した分をインク ン

各 ン

MEMORY

ン 定 義

所 定

領域内

記述

配置

ン 記

述 集

約 結合

■ ン . 位置

ン 意 味 ン う

初期値 ン

■ ン *

ワ 意味

■ ン ン 定義 C言語 定義 い 変数 や関数 間 ン 衝突 起 可能性

出 防 PROVIDE ン = 値 利 用 内 ン 定 義

(17)

GNU ン Nios II Software Build Tool

4-2.

attribute

ン 使用 い 直接 ン 指定 図4-7

う GCC 提供 い 関数 "__attribute__" 機能 使用 特定 変数や関数 任意

ン 配置 可能 ANSI C #pragma あ attribute 機能 使用 強 推奨

図4-7. attribute 使用例

※#pragma:

attribute 機能 様 領域へ 配置

明示 ン 固 拡張機能 あ CPU

移植 場合 互換性 注意 必要

ン 何 配置 形式 あ ン ld 出力

ン 指定通 空間 配置 う 確認 利用 Nios II

SBT 図4-8 う nios2-elf- ld ン -M ン 提供 出力

図4-8. 生成例

int foo_var __attribute__ ((section (".data_tcm"))) = 0;

/* 変数foo_varを .data_tcm セク ョン 配置 */

void bar_func(void* ptr) __attribute__((section (".ext_ssram")));

/* 関数bar_func()を.ext_ssram セク ョン 配置 */

(18)

5.

BSP (Board Support Package)

固 ンや OS 結 ン

BSP (Board Support Package) OS や CPU 提供

あ 実体 CPU 特定 OS 実行 必要

や 集合体 Nios II SBT 場合 Qsys 内 ン ネン 用

や HAL 関連 や BSP 内

展開

図5-1. 階 関係

Nios II SBT ン や make 設定 最適化 ン等 GCC 関連

各種設定 Nios II SBT BSP Editor GUI 設定

標準C

HAL API

Nios® II

ン Nios II SBT

ン 内 格納

各 種 や

尾 _bsp

(19)

GNU ン Nios II Software Build Tool

6.

Nios II SBT GNU や ン 対 設定 柔軟行え 精通 い 設計者

用 GUI GNU や ン 概念 考慮 使用 伴う恐

あ 資料 GNU や ン 概念 持 後 次章 紹 参考文献や専門

通 理解 深

尚 GNU AS IS 無保証 表記 い 不具合 自己解決 いう

暗黙 在 扱い 十分 注意 願い

7.

参考文献

1. GNU ン ン

Mike Loukides & Andy Oram 共著 引地美恵子 引地信之 共訳

2. 実例 学ぶ GCC 格的活用法 CQ 出版社 岸哲夫著

3. MAKE 遉人 株式会社 ン C. ン / A. ネ ン ン / E. ン 共著 小川 夫訳

4. 組 込 OS 基礎講 株式会社翔泳社

ン / ン 共著 宇 訳

5. ン 実践開発 CQ 出版社 坂井 弘亮著

(20)

免責 利用 注意

弊社 資料 入手 様 記 使用 注意 一 い い 使用 い

1. 資料 非売品 許可無 転売 や無断複製 禁

2. 資料 予告 変更 あ

3.

改版

Revision 年 概要

図 3-2.    gcc ン 例 gcc  ン ン 行う cc1  や   as  背後 実行 い 確認 図 3-3  う ン 指定 ば 段階 踏 ン 可能 図 3-3
図 3-4.    Nios II SBT 自動生成   make  一部抜粋
図 4-1.    ン 配置 い 様子 基 領域 C  言語 領域 確保 要 大雑把 3 領域 分類 ◇ 領域 :     変数 auto  変数 関数 引数 確保 ◇静的記憶領域 : 変数   static  変数 確保     ◇動的記憶領域 : 動的 確保 領域 領域 確保#include &lt;stdio.h&gt;#include “system.h”   #define       BUFF_SIZE   5 int buff_1[BUFF_SIZE]; ←int buff_2[BUFF_SI

参照

関連したドキュメント

of Internal Medicine II, School dicine, University of Kanazawa.. Takaramachi 13-1,

ホーム画面で (設定) ネットワークとインターネッ ト モバイル ネットワーク 4G 回線による通話

Further using the Hamiltonian formalism for P II –P IV , it is shown that these special polynomials, which are defined by second order bilinear differential-difference equations,

Apply Medal II EC at 1.33-1.67 pt/A in the fall (September 1-December 1) after harvest of the previous crop and prior to Italian ryegrass emergence. Use the lower Medal II EC rate

Altera Nios II フォルダを展開し、Existing Nios II software build tools project or folder into workspace を選択します(図 2–9 を参 照)。.

Please contact the Ministry of Economy, Trade and Industry of Japan or the Department of Commerce of the United States for details about

そのため本研究では,数理的解析手法の一つである サポートベクタマシン 2) (Support Vector

1) Manual of symbols and terminology for physicochemical quantities and units - Appendix II definitions, terminology and symbols in colloid and surface chemistry, Part